//
//  HKEssenceViewController.m
//  BaiSiBuDeJie
//
//  Created by 胡锦涛 on 2018/11/29.
//  Copyright © 2018 胡锦涛. All rights reserved.
/*
 思路：
 精华控制器添加一个UIScrollView, UIScrollView上添加五个UITableView，且每个UITableView可以上下滑动、互不影响，每个TableView又可以左右切换。(超出scrollView部分会被剪掉)
 // UIBarButtonItem:描述按钮具体的内容
 // UINavigationItem:设置导航条上内容(左边,右边,中间)
 // tabBarItem: 设置tabBar上按钮内容(tabBarButton)
 */

#import "HKEssenceViewController.h"
#import "HKTitleButton.h"

#import "HKAllViewController.h"
#import "HKVideoViewController.h"
#import "HKVoiceViewController.h"
#import "HKWordViewController.h"
#import "HKPictureViewController.h"

@interface HKEssenceViewController ()<UIScrollViewDelegate>
/** 用来存放所有子控制器view的scrollView */
@property (nonatomic, weak) UIScrollView *scrollView;
/** 标题栏 */
@property (nonatomic, weak) UIView *titlesView;
/** 标题下划线 */
@property (nonatomic, weak) UIView *titleUnderline;
/** 上一次点击的标题按钮 */
@property (nonatomic, weak) HKTitleButton *previousClickedTitleButton;
@end

@implementation HKEssenceViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = kWhiteColor;
    // 初始化子控制器
    [self setupAllChildVcs];
    
    // 设置导航条
    [self setupNavBar];
    
    // scrollView
    [self setupScrollView];
    
    // 标题栏
    [self setupTitlesView];
}
/**
 *  初始化子控制器，分模块管理
 */
- (void)setupAllChildVcs
{
    [self addChildViewController:[[HKAllViewController alloc] init]];
    [self addChildViewController:[[HKVideoViewController alloc] init]];
    [self addChildViewController:[[HKVoiceViewController alloc] init]];
    [self addChildViewController:[[HKPictureViewController alloc] init]];
    [self addChildViewController:[[HKWordViewController alloc] init]];
}
- (void)setupNavBar {
    // 左边按钮
    // 把UIButton包装成UIBarButtonItem.就导致按钮点击区域扩大
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithimage:[UIImage imageNamed:@"nav_item_game_icon"] highImage:[UIImage imageNamed:@"nav_item_game_click_icon"] target:self action:@selector(game)];
    
    // 右边按钮
    self.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithimage:[UIImage imageNamed:@"navigationButtonRandom"] highImage:[UIImage imageNamed:@"navigationButtonRandomClick"] target:self action:@selector(game)];
    
    // titleView
    self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainTitle"]];
}

- (void)game {
    
}
/** scrollView */
- (void)setupScrollView
{
    // 不允许自动修改UIScrollView的内边距
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.backgroundColor = [UIColor blueColor];
    scrollView.frame = self.view.bounds;
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.pagingEnabled = YES;
    scrollView.delegate = self;
    [self.view addSubview:scrollView];
    self.scrollView = scrollView;
    // 添加子控制器的view
    NSUInteger count = self.childViewControllers.count;
    CGFloat scrollViewW = scrollView.width;
    CGFloat scrollViewH = scrollView.height;
    
    for (NSUInteger i = 0; i < count; i++) {
        // 取出i位置子控制器的view
        UIView *childVcView = self.childViewControllers[i].view;
        //TableViewController默认Y = 20
        childVcView.frame = CGRectMake(i * scrollViewW, 0, scrollViewW, scrollViewH);
        [scrollView addSubview:childVcView];
    }
    //如果TableView和scrollView都能向上滑动，这个事件交由TableView处理
   scrollView.contentSize = CGSizeMake(count * scrollViewW, 0);//设置左右滑动
    //TableViewController默认Y = 20
    HKLog(@"%@",NSStringFromCGRect([[UIViewController alloc] init].view.frame));// {{0, 0}, {414, 736}}
    HKLog(@"%@",NSStringFromCGRect([[UITableViewController alloc] init].view.frame));// {{0, 20}, {414, 716}}
    
}

/** 标题栏 */
- (void)setupTitlesView
{
    UIView *titlesView = [[UIView alloc] init];
    // 设置半透明背景色
    titlesView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.5];
    //titlesView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
    //子控件会继承父控件设置的alpha透明度
    //titlesView.alpha = 0.5;
    titlesView.frame = CGRectMake(0, HK_NAVBAR_HEIGHT, self.view.width, 35);
    [self.view addSubview:titlesView];
    self.titlesView = titlesView;
    // 标题栏按钮
    [self setupTitleButtons];
    
    // 标题下划线
    [self setupTitleUnderline];
}

/**
 *  标题栏按钮
 */
- (void)setupTitleButtons
{
    // 文字
    NSArray *titles = @[@"全部", @"视频", @"声音", @"图片", @"段子"];
    NSUInteger count = titles.count;
    
    // 标题按钮的尺寸
    CGFloat titleButtonW = self.titlesView.width / count;
    CGFloat titleButtonH = self.titlesView.height;
    
    // 创建5个标题按钮
    for (NSUInteger i = 0; i < count; i++) {
        HKTitleButton *titleButton = [[HKTitleButton alloc] init];
        [titleButton addTarget:self action:@selector(titleButtonClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.titlesView addSubview:titleButton];
        // frame
        titleButton.frame = CGRectMake(i * titleButtonW, 0, titleButtonW, titleButtonH);
        titleButton.tag = i;
        // 文字
        [titleButton setTitle:titles[i] forState:UIControlStateNormal];
        [titleButton setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
        [titleButton setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
        //[titleButton setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
    }
}
/**
 *  标题下划线
 */
- (void)setupTitleUnderline
{
    // 标题按钮
    HKTitleButton *firstTitleButton = self.titlesView.subviews.firstObject;
    
    // 下划线
    UIView *titleUnderline = [[UIView alloc] init];
    titleUnderline.height = 2;
    titleUnderline.y = self.titlesView.height - titleUnderline.height;
    titleUnderline.backgroundColor = [firstTitleButton titleColorForState:UIControlStateSelected];
    [self.titlesView addSubview:titleUnderline];
    self.titleUnderline = titleUnderline;
    
    // 切换按钮状态
    firstTitleButton.selected = YES;
    self.previousClickedTitleButton = firstTitleButton;
    
    [firstTitleButton.titleLabel sizeToFit]; // 让label根据文字内容计算尺寸
    self.titleUnderline.width = firstTitleButton.titleLabel.width + 10;
    self.titleUnderline.centerX = firstTitleButton.centerX;
}
#pragma mark - 监听
/**
 *  点击标题按钮
 */
- (void)titleButtonClick:(HKTitleButton *)titleButton
{
    self.previousClickedTitleButton.selected = NO;
    titleButton.selected = YES;
    self.previousClickedTitleButton = titleButton;
    [UIView animateWithDuration:0.25 animations:^{
        // 处理下划线
        HKLog(@"%@", [titleButton titleForState:UIControlStateNormal])
        //titleLabel.text 要根据状态取，一般采用currentTitle
        //self.titleUnderline.width = [titleButton.currentTitle sizeWithFont:titleButton.titleLabel.font].width;
        //NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
        //attributes[NSFontAttributeName] = titleButton.titleLabel.font;
        //self.titleUnderline.width = [titleButton.currentTitle sizeWithAttributes:attributes].width;
        self.titleUnderline.width = titleButton.titleLabel.width + 10;
        self.titleUnderline.centerX = titleButton.centerX;
        
        // 滚动scrollView
        //NSUInteger index = [self.titlesView.subviews indexOfObject:titleButton];
        //CGFloat offsetX = self.scrollView.width * index;
        CGFloat offsetX = self.scrollView.width * titleButton.tag;
        //偏移y值保持原来
        self.scrollView.contentOffset = CGPointMake(offsetX, self.scrollView.contentOffset.y);
    }];
}
#pragma mar - 数据源
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView.tag == 0) return 10;
    return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"ID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ID"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
        cell.backgroundColor = [UIColor clearColor];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"test-%zd", indexPath.row];
    return cell;
}
#pragma mark - <UIScrollViewDelegate>
/**
 *  当用户松开scrollView并且滑动结束时调用这个代理方法（scrollView停止滚动的时候）
 */
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // 求出标题按钮的索引
    NSUInteger index = scrollView.contentOffset.x / scrollView.width;
    // index == [0, 4]
    // 点击对应的标题按钮
    HKTitleButton *titleButton = self.titlesView.subviews[index];
    //HKTitleButton *titleButton = [self.titlesView viewWithTag:index];
    //此代码 索引为0时会报错(viewWithTag 递归查找，包括自己 先查找自己的tag，再查找子视图的tag，父视图默认tag为0，找到的是UIView而不是Button，所以setSelected方法找不到)
    [self titleButtonClick:titleButton];
}

/**
 *  当用户松开scrollView时调用这个代理方法（结束拖拽的时候）
 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    JKFunc;
}

/*
 -[UIView setSelected:]: unrecognized selector sent to instance 0x7fbcba35ab10
 
 -[HKPerson length]: unrecognized selector sent to instance 0x7fbcba35ab10
 将HKPerson当做NSString来使用
 
 - (void)test:(NSString *)string
 {
 string.length;
 }
 id str = [[HKPerson alloc] init];
 [self test:str];
 
 -[HKPerson count]: unrecognized selector sent to instance 0x7fbcba35ab10
 将HKPerson当做NSArray或者NSDictionary来使用
 
 -[HKPerson setObject:forKeyedSubscript:]: unrecognized selector sent to instance 0x7fbcba35ab10
 名字中带有Subscript的方法，一般都是集合的方法，比如NSMutableDictionary\NSMutableArray的方法
 将HKPersonNSMutableDictionary来使用
 */

/*
 A
 -D1  0
 -E1 10
 -E2 0
 -D2 10
 -F1 0
 -F2 0
 -D3 0
 
 [A viewWithTag:10]; // 返回E1
 */

/*
 @implementation UIView
 
 - (UIView *)viewWithTag:(NSInteger)tag
 {
 // 如果自己的tag符合要求，就返回自己
 if (self.tag == tag) return self;
 
 // 遍历子控件（也包括子控件的子控件...），直到找到符合条件的子控件为止
 for (UIView *subview in self.subviews) {
 //        if (subview.tag == tag) return subview;
 UIView *resultView = [subview viewWithTag:tag];
 if (resultView) return resultView;
 }
 
 return nil;
 }
 
 @end
 */
/*
 一、按钮的状态
 1.UIControlStateNormal
 1> 除开UIControlStateHighlighted、UIControlStateDisabled、UIControlStateSelected以外的其他情况，都是normal状态
 2> 这种状态下的按钮【可以】接收点击事件
 
 2.UIControlStateHighlighted
 1> 【当按住按钮不松开】或者【highlighted = YES】时就能达到这种状态
 2> 这种状态下的按钮【可以】接收点击事件
 
 3.UIControlStateDisabled
 1> 【button.enabled = NO】时就能达到这种状态
 2> 这种状态下的按钮【无法】接收点击事件
 
 4.UIControlStateSelected
 1> 【button.selected = YES】时就能达到这种状态
 2> 这种状态下的按钮【可以】接收点击事件
 
 二、让按钮无法点击的2种方法
 1> button.enabled = NO;
 *【会】进入UIControlStateDisabled状态
 
 2> button.userInteractionEnabled = NO;
 *【不会】进入UIControlStateDisabled状态，继续保持当前状态
 
 */
//- (void)titleButtonClick:(HKTitleButton *)titleButton
//{
//    self.previousClickedTitleButton.enabled = YES;
//    titleButton.enabled = NO;
//    self.previousClickedTitleButton = titleButton;
//}

//- (void)titleButtonClick:(HKTitleButton *)titleButton
//{
//    [self.previousClickedTitleButton setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
//    [titleButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//    self.previousClickedTitleButton = titleButton;
//}
@end
